package com.xzcedu.inputstream_;

import com.xzcedu.outputstream_.Dog;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.ObjectInputStream;
import java.io.Serializable;

/**
 * @author 徐州城
 * @version 1.0
 */
public class ObjectInputStream_ {
    public static void main(String[] args) throws Exception {

        //指定反序列化的文件
        String filePath = "e:\\data.dat";

        ObjectInputStream ois = new ObjectInputStream(new FileInputStream(filePath));

        //读取
        //解读
        //1. 读取(反序列化)的顺序需要和保存的数据(序列化) 的顺序一致
        //2. 否则会抛出异常

        System.out.println(ois.readInt());
        System.out.println(ois.readBoolean());
        System.out.println(ois.readChar());
        System.out.println(ois.readDouble());
        System.out.println(ois.readUTF());
        Object o = ois.readObject();
        System.out.println("运行类型=" + o.getClass());
        System.out.println("dog的信息=" + o);//底层object -> Dog

        //这里是特别重要的细节：
        //1. 如果我们希望调用Dog的方法，需要向下转型
        //2. 需要我们将Dog定义在，放在可以引用的位置

        Dog dog = (Dog) o;
        System.out.println(dog.getName());


        //关闭流，关闭外层流
        ois.close();
    }
}

